package utils

import (
	"time"
)

const (
	compactTimeFmt = "20060102150405" // yyyymmddHHMMSS 格式
)

// TimeFmt 时间转yyyy-mm-dd HH:MM:SS格式字符串
func TimeFmt(t time.Time) string {
	return t.Format(time.DateTime)
}

// DateFmt 时间转yyyy-mm-dd字符串
func DateFmt(t time.Time) string {
	return t.Format(time.DateOnly)
}

// TimeParse yyyy-mm-dd HH:MM:SS格式字符串转时间
func TimeParse(timeStr string) (time.Time, error) {
	return time.Parse(time.DateTime, timeStr)
}

// DateParse yyyy-mm-dd格式字符串转时间
func DateParse(timeStr string) (time.Time, error) {
	return time.Parse(time.DateOnly, timeStr)
}

// UnixToFormat 时间戳格式转yyyy-mm-dd格式字符串
//
// 如 1704038400 -> '2024-01-01'
func UnixToFormat(unix int64) string {
	return time.Unix(unix, 0).Format(time.DateOnly)
}

// TimeAdd 对时间 t 增加日、时、分、秒，可为负数
func TimeAdd(t time.Time, days, hours, minutes, seconds int) time.Time {
	duration := time.Duration(0)
	if days > 0 {
		duration += time.Hour * 24 * time.Duration(days)
	}
	if hours > 0 {
		duration += time.Hour * time.Duration(hours)
	}
	if minutes > 0 {
		duration += time.Minute * time.Duration(minutes)
	}
	if seconds > 0 {
		duration += time.Second * time.Duration(seconds)
	}
	return t.Add(duration)
}

// Today 得到今天的日期（时分秒值为0）
func Today() time.Time {
	now := time.Now()
	return time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
}

// FutureDate 获取未来 days 天的日期（时分秒值为0），days 可为负数
func FutureDate(days int) time.Time {
	return TimeAdd(Today(), days, 0, 0, 0)
}

// NowCompactTimeFmt 获取当前 yyyymmddHHMMSS 格式的字符串
func NowCompactTimeFmt() string {
	return time.Now().Format(compactTimeFmt)
}
